﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CloudStorageLight.WpfClient.Tests
{
   public static class AppUtil
    {

        /// <summary>
        /// 構成情報から指定したキーの情報を取得します
        /// </summary>
        /// <param name="key">キーの値</param>
        /// <returns>構成ファイルから取得した値。定義されていない場合はnullが返されます</returns>
        public static string GetAppConfigValue(string key)
        {
            return ConfigurationManager.AppSettings.Get(key);
        }

        /// <summary>
        /// 構成情報から指定したキーの情報を取得します。
        /// 無指定の場合は指定した既定値を返します
        /// </summary>
        /// <param name="key">キーの値</param>
        /// <param name="defValue">構成ファイルに定義されていない場合に返す値</param>
        /// <returns>構成ファイルから取得した値。定義されていない場合はdefValueで指定した値が返されます</returns>
        public static string GetAppConfigValue(string key, string defValue)
        {
            string val = ConfigurationManager.AppSettings.Get(key);
            return val ?? defValue;
        }

        /// <summary>
        /// 構成情報から指定したキーの情報を取得します。
        /// 無指定の場合は指定した既定値を返します
        /// </summary>
        /// <typeparam name="T">取得するデータ型</typeparam>
        /// <param name="key">キーの値</param>
        /// <param name="defValue">構成ファイルに定義されていない場合に返す値</param>
        /// <returns>構成ファイルから取得した値。定義されていない場合はdefValueで指定した値が返されます</returns>
        public static T GetAppConfigValue<T>(string key, T defValue)
        {
            string val = ConfigurationManager.AppSettings.Get(key);
            if (string.IsNullOrEmpty(val)) return defValue;
            return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(val);
        }

        /// <summary>
        /// 構成情報から指定したキーの情報を指定したEnum型で取得します
        /// </summary>
        /// <typeparam name="TEnum">取得するEnum型</typeparam>
        /// <param name="key">キーの値</param>
        /// <param name="defValue">構成ファイルに定義されていない場合に返す値</param>
        /// <returns>構成ファイルから取得した値。定義されていない場合はdefValueで指定した値が返されます</returns>
        internal static TEnum GetAppConfigEnumValue<TEnum>(string key, TEnum defValue)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            if (value == null) return defValue;
            return (TEnum)Enum.Parse(typeof(TEnum), value);
        }

 
    }
}
